package rbb.itm5.bwinf.roboter.Control.Drivers;

import rbb.itm5.bwinf.roboter.Control.DriverInterface;
import rbb.itm5.bwinf.roboter.Control.Roboter;
/**
 * Dies ist ein Beispiel Fahrer.
 * In diesem wird der Ablauf der Steuerungprogramms erläutert.
 * @author Dominik Jakielski
 */
public class SampleDriver extends DriverInterface {

    public SampleDriver(Roboter robot) {
        super(robot);
    }
    //Speicher für die Schritte in grader Richtung
    private int grade = 0;

    @Override
    protected void drive() throws InterruptedException {

        while (!isPaused() && !robot.checkGoalHasFound()) {
            if (!robot.goForward()) {
                turn();
            } else {
                int rnd = (int) Math.round(Math.random() * 30);
                if (rnd == grade) {
                    turn();
                }
            }




            //Warte auf den nächsten Schritt um eine Animation zu erstellen
            waitForNextStep();
        }
    }

    /**
     * Drehe den Roboter in einer Zufälliger Richtung, abhängig von den umlegenden Hindernissen.
     */
    private void turn() {
        boolean left = robot.hasLeftColision(), right = robot.hasRightColision();
        if (!left && !right) {
            if (Math.random() >= 0.5) {
                robot.turnLeft();
            } else {
                robot.turnRight();
            }
        } else if (!left) {
            robot.turnLeft();
        } else if (!right) {
            robot.turnRight();
        }
        grade = 0;
    }

    @Override
    public String getName() {
        return "Beispiel Fahrer";
    }

    @Override
    protected void onStart() {
        System.out.println(getName() + " started to drive");
    }

    @Override
    protected void onPause() {
        System.out.println(getName() + " take a break");
    }

    @Override
    protected void onResume() {
        System.out.println(getName() + " drive again");
    }

    @Override
    protected void onStop() {
        System.out.println(getName() + " stop to drive");
    }

    @Override
    protected void onReady() {
        System.out.println(getName() + " has execute his task");
    }
}
